// 日期格式转为数字格式
export const dateToNum = (date) => {
  if (!date) {
    return '';
  }
  return date.replace(/-|:|\s/g, '');
};

/**
 * 数字格式转为日期格式
 * str(string):日期数字
 * getTime(boolean)：是否获取毫秒数
 */
export const numToDate = (str,getTime) => {
  if (!str) {
    return '';
  }
  let str0 = ""
  if (str.slice(0, 4)) {
      str0 += str.slice(0, 4)
      if (str.slice(4, 6)) {
          str0 += '-' + str.slice(4, 6)
          if (str.slice(6, 8)) {
              str0 += '-' + str.slice(6, 8)
              if (str.slice(8, 10)) {
                  str0 += ' ' + str.slice(8, 10)
                  if (str.slice(10, 12)) {
                      str0 += ':' + str.slice(10, 12)
                      if (str.slice(12, 14)) {
                          str0 += ':' + str.slice(12, 14)
                      }
                  }
              }
          }
      }
  }
  if (getTime) {
      return (new Date(str0.replace(new RegExp("-", "gm"), "/"))).getTime(); //得到毫秒数
  } else {
      return str0
  }
  // let i = 0;
  // const regExp = new RegExp('', 'g');
  // if(getTime){
  //   return (new Date(str.replace(regExp, () => {
  //     i++;
  //     return i === 5 || i === 7 ? '-' : i === 9 ? ' ' : i === 11 || i === 13 ? ':' : '';
  //   }).replace(new RegExp("-", "gm"), "/"))).getTime()
  // }else{
  //   return str.replace(regExp, () => {
  //     i++;
  //     console.log(i)
  //     return i === 5 || i === 7 ? '-' : i === 9 ? ' ' : i === 11 || i === 13 ? ':' : '';
  //   });
  // }

};

/**
 * 毫秒数转化为日期格式
 */
export const msToDate = (ms) => {
  const now = new Date(ms);
  return `${now.getFullYear()}-${dateFormat(now.getMonth() + 1)}-${dateFormat(now.getDate())}`;
};

/**
 * 毫秒数转化为带时间的日期格式
 */
export const msToTime = (ms) => {
    const dt = new Date(ms)

    const y = dt.getFullYear()
    const m = (dt.getMonth() + 1 + '').padStart(2, '0')
    const d = (dt.getDate() + '').padStart(2, '0')
    const hh = (dt.getHours() + '').padStart(2, '0')
    const mm = (dt.getMinutes() + '').padStart(2, '0')
    // const ss = (dt.getSeconds() + '').padStart(2, '0')

    return `${y}-${m}-${d} ${hh}:${mm}`
}

// 日期格式化：小于十补0
export const dateFormat = (val) => {
  return val >= 10 ? val : '0' + val;
};

/**
 * 获取当前时间数字格式(北京时)
 * getTime(boolean):是否需要时间
 */
export const getDateNum = (getTime) => {
  const now = new Date();
  if(getTime){
    return `${now.getFullYear()}${dateFormat(now.getMonth() + 1)}${dateFormat(now.getDate())}${dateFormat(now.getHours())}${dateFormat(now.getMinutes())}${dateFormat(now.getSeconds())}`;
  }else{
    return `${now.getFullYear()}${dateFormat(now.getMonth() + 1)}${dateFormat(now.getDate())}`;
  }
};
/**
 * 获取当前时间数字格式(世界时)
 * getTime(boolean):是否需要时间
 */
 export const getUTCDateNum = (getTime) => {
  const now = new Date();
  if(getTime){
    return `${now.getUTCFullYear()}${dateFormat(now.getUTCMonth() + 1)}${dateFormat(now.getUTCDate())}${dateFormat(now.getUTCHours())}${dateFormat(now.getUTCMinutes())}${dateFormat(now.getUTCSeconds())}`;
  }else{
    return `${now.getUTCFullYear()}${dateFormat(now.getUTCMonth() + 1)}${dateFormat(now.getUTCDate())}`;
  }
};

/**
 * 加减日期
 * date(string):日期格式
 * days(number)：加减天数
 */
export const addDate = (date, days)=> {
  var d = new Date(date);
  d.setDate(d.getDate() + days);
  return `${d.getFullYear()}${dateFormat(d.getMonth() + 1)}${dateFormat(d.getDate())}`;   // 获取的时间格式为 20210409
};

/**
 * 加减小时
 * date(string):日期格式
 * days(number)：加减小时数
 */
export const addHour = (oldtime, val)=> { //   获取时间并格式化
    // 获取前val小时的时间
    var dt = new Date(oldtime);
    val === 0 ? '' : dt.setTime(dt.getTime() + 60 * 60 * 1000 * val);
    const y = dt.getFullYear();
    const m = (dt.getMonth() + 1 + "").padStart(2, "0");
    const d = (dt.getDate() + "").padStart(2, "0");
    const hh = (dt.getHours() + "").padStart(2, "0");
    const mm = (dt.getMinutes() + "").padStart(2, "0");
    const ss = (dt.getSeconds() + "").padStart(2, "0");
    const targettime = `${y}-${m}-${d} ${hh}:${mm}:${ss}`

    return targettime;  // 获取的时间格式为 2021-04-09 09:34:00
};

// 获取的时间格式为 2021-04-09
export const getNowDate = ()=> {
    var myDate = new Date();
    var str = myDate.toLocaleDateString().split('/')[0] + '-'
    Number(myDate.toLocaleDateString().split('/')[1]) > 9 ? str += myDate.toLocaleDateString().split('/')[1] + '-' : str += '0' + myDate.toLocaleDateString().split('/')[1] + '-'
    Number(myDate.toLocaleDateString().split('/')[2]) > 9 ? str += myDate.toLocaleDateString().split('/')[2] : str += '0' + myDate.toLocaleDateString().split('/')[2]
    return str
};

//处理日期时间
export const formatDatetime = (str, getTime)=> {
    var str0 = ""
    if (str.slice(0, 4)) {
        str0 += str.slice(0, 4)
        if (str.slice(4, 6)) {
            str0 += '-' + str.slice(4, 6)
            if (str.slice(6, 8)) {
                str0 += '-' + str.slice(6, 8)
                if (str.slice(8, 10)) {
                    str0 += ' ' + str.slice(8, 10)
                    if (str.slice(10, 12)) {
                        str0 += ':' + str.slice(10, 12)
                    }
                }
            }
        }
    }
    if (getTime) {
        return (new Date(str0.replace(new RegExp("-", "gm"), "/"))).getTime(); //得到毫秒数
    } else {
        return str0
    }
};

//处理日期时间，返回mm月dd日
export const formatDatetimeCH = (str)=> {
    var str0 = ""
    if (str.slice(0, 4)) {
        str0 += str.slice(0, 4)
        if (str.slice(4, 6)) {
            str0 += '年' + str.slice(4, 6)
            if (str.slice(6, 8)) {
                str0 += '月' + str.slice(6, 8)
                if (str.slice(8, 10)) {
                    str0 += '日 ' + str.slice(8, 10)
                    if (str.slice(10, 12)) {
                        str0 += ':' + str.slice(10, 12)
                    }
                }
            }
        }
    }
    if (str.length === 8) {
        return str0+'日';
    } else {
        return str0
    }
};

// 第一位是字母后几位全是数字的字符串都转为数字（应用于处理耀斑级别）
export const formatLvToV = (data) => {
  if (data) {
      return data.charCodeAt() + Number(data.slice(1))
  } else {
      return 0
  }
};

/**
 * 数值转为科学计数法
 * num(number)：小数位数
 * plus: 是否写成带“+”的形式，如4e+2
 * plusNum: 指数位数
 */
export const formatValueToE = (value, num=1, plus=false, plusNum=1)=>{
  var p = Math.floor(Math.log(value) / Math.LN10);
  var n = value * Math.pow(10, -p);
  if (n === 10) {
      n = 1;
      p = p + 1;
  }
  if (plusNum > 1) {
      p = '0'+ p; //指数位补0
  }
  if (value && value>-99.9) {  //排除坏值，还需要确定坏值的范围
      if (plus) {
          return p>0?n.toFixed(num) + 'e+' + p : n.toFixed(num) + 'e' + p;
      } else {
          return n.toFixed(num) + 'e' + p;
      }
  } else {
      return value
  }
};

// 将科学计数法转换成小数
export const scientificToNumber = (num) => {
    var str = num.toString();
    var reg = /^(\d+)(e)([\-]?\d+)$/;
    var arr, len,
        zero = '';
    /*6e7或6e+7 都会自动转换数值*/
    if (!reg.test(str)) {
        // return Number(num).toLocaleString();
        return Number(num).toString();
    } else {
        /*6e-7 需要手动转换*/
        arr = reg.exec(str);
        len = Math.abs(arr[3]) - 1;
        for (var i = 0; i < len; i++) {
            zero += '0';
        }
        return '0.' + zero + arr[1];
    }
};

//判断日期格式
export const checkDate = (value) => {
    let days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    let YMD = value.split("-");
    let y = parseInt(YMD[0], 10);
    let m = parseInt(YMD[1], 10);
    let d = parseInt(YMD[2], 10);
    //判断月份是否合法
    if (m > 12 || m < 1) { return false; }
    //判断是否是闰年
    if ((y % 4 === 0 && y % 100 !== 0) || (y % 400 === 0)) { days[2] = 29; }
    //判断当月天数是否合法
    if (d > days[m]) { return false; }
};

/**
 * 判断时间格式
 * value： 时间(hh:mm:ss)
 * index：需要确认到的位置。0-小时；1-分钟；2-秒
 */
export const checkTime = (value, index=2) => {
    let datetime = value.split(":");
    let hour = parseInt(datetime[0], 10);
    let min = parseInt(datetime[1], 10);
    let sec = parseInt(datetime[2], 10);
    //判断月份是否合法
    if (index>=0 && (hour > 23 || hour < 0)) { return false; }
    if (index>=1 && (min > 59 || min < 0)) { return false; }
    if (index>=2 && (sec > 59 || sec < 0)) { return false; }
    return true;
};

/**
 * 下载文件中字符串拼接
 * name(string)：字段名称
 * len(number)：占位长度
 */
export const stringSplicing = (name,len) => {
  len = -len
  if(name == null){
      name = ''
  }else{
      name = String(name)
  }
  if(name.length >= len){
      return name.slice(0,len) + ' '
  }else{
      let str = ''
      for(let i=0;i<len - name.length;i++){
          str += ' '
      }
      return name + str + ' '
  }
};

/**
 * 执行下载文件的操作
 * fileName(string):文件名称
 * content(string):文件内容
 */
 export const downloadByBlob = (fileName, content) => {
  let blob = new Blob([content], {
      type: "text/plain;charset=utf-8"
  });
  let reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onload = function(e) {
      let a = document.createElement('a');
      a.download = fileName;
      a.href = e.target.result;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
  }
};

/**
 * 数组对象排序
 * name(string):对象中需要排序的属性
 */
export const compare = (name) => {
  return function(o, p){
    var a, b;
    if (typeof o === "object" && typeof p === "object" && o && p) {
      a = o[name];
      b = p[name];
      if (a === b) {
        return 0;
      }
      if (typeof a === typeof b) {
        return a < b ? -1 : 1;
      }
      return typeof a < typeof b ? -1 : 1;
    }
    else {
      throw ("error");
    }
  }
 }

//  全屏加载中
export const loading = (object) => {
  return object.$loading({
    lock: true,
    text: '拼命加载中',
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.7)',
  });
}